package com.bw.controller;

import com.alibaba.fastjson.JSONObject;
import com.bw.entity.User;
import com.bw.mapper.UserMapper;
import org.spring.kun.common.GiteeUtils;
import org.spring.kun.common.TokenUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletResponse;

@Controller
public class GiteeLoginController {


    @Autowired
    UserMapper userMapper;

    /**
     * 当点击同意授权之后 ，浏览器会自动跳转访问这个网址 并传来一个临时授权码 code
     *
     * @param code
     * @return
     */
    @RequestMapping("/callbackCode.do")
    public String callbackCode(String code, HttpServletResponse response, Model model) {

        System.out.println("接收到的临时授权码 " + code);
        // 根据临时授权码 获取token
        String tokenByCode = GiteeUtils.getAccessTokenByCode(code);
        System.out.println("获取到的token " + tokenByCode);

        // 根据token 获取用户的账号资源

        JSONObject userInfoByToken = GiteeUtils.getGiteeUserInfoByToken(tokenByCode);
        System.out.println("获取用户的账号资源 " + userInfoByToken.toJSONString());

        // 解析获取到的用户信息
        String name = userInfoByToken.getString("login");  // 把gitee账号中的个人空间地址 当做咱们系统的用户名
        String nickName = userInfoByToken.getString("name"); //把gitee账号中的个人名称 当做咱们系统的昵称
        String avatarUrl = userInfoByToken.getString("avatar_url");//把gitee账号中的头像 当做咱们系统的头像
        Integer giteeId = userInfoByToken.getInteger("id");

        // 开始执行注册 注册之前要判断 是否已经注册过用户

        User userDB = userMapper.selectByName(name);
        if (userDB == null) {  // 之前没有注册过

            userDB = new User();

            userDB.setName(name);
            userDB.setNickName(nickName);
            userDB.setAvatarUrl(avatarUrl);
            userDB.setGiteeId(giteeId);
            userMapper.addUser(userDB);
        }else { // 之前已经注册过  刷新用户的昵称和头像

            userDB.setNickName(nickName);
            userDB.setAvatarUrl(avatarUrl);
            userMapper.updateUser(userDB);
        }
       /* // 加密用户信息 得到 token,并且设置令牌的过期时间为 30分钟
        String token = JwtUtils.createToken(userDB, 30);
        // 把令牌放入cookie
        Cookie cookie = new Cookie("token", token);
        cookie.setMaxAge(1800); // cookie的过期时间也是 30分钟
        // 把cookie返回给浏览器 ，浏览器自动保存
        response.addCookie(cookie);*/

        TokenUtils.responseTokenByCookie(userDB,response,30);

        //重定向 到list.do  返回的不是页面；  告诉浏览器接下来去访问 list.do

        return "redirect:list.do";


    }


}
